﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ImapactTenis;
using ImapactTenis.Relatorios;

namespace _3___Apresentação_Windows
{
    public partial class Gerentes : Form
    {
        public Gerentes()
        {
            InitializeComponent();
            var rel = new Gerente().GerarRelatorioControleEstoque();
            gridEstoque.DataSource = ToDataTable(rel);
        }

        private void btnConsultar_Click(object sender, EventArgs e)
        {
            if (txtAlterarFuncional.Text.Length > 0)
            {
                try
                {
                    var u = new Usuario().ObterUsuario(Convert.ToInt32(txtAlterarFuncional.Text));
                    txtAlterarFuncional.Enabled = false;
                    btnConsultar.Enabled = false;

                    txtAlterarNome.Text = u.Nome;
                    txtAlterarNome.Visible = true;
                    txtAlterarSenha.Text = u.Senha;
                    txtAlterarSenha.Visible = true;

                    btnAlterar.Visible = true;
                    btnNovaConsulta.Visible = true;
                }
                catch
                {
                    MessageBox.Show("Não foi encontrado nenhum usuário");
                }
            }
            else
            {
                MessageBox.Show("Digite a funcional");
            }
        }

        private void btnAlterar_Click(object sender, EventArgs e)
        {
            try
            {
                if (new Gerente().AlterarUsuario(Convert.ToInt32(txtFuncional.Text), txtSenha.Text, txtNome.Text))
                {
                    MessageBox.Show("Usuário alterado com sucesso");
                    new FormHelper().RecursiveClearTextBoxes(this.Controls);
                    txtAlterarFuncional.Enabled = true;
                    btnConsultar.Enabled = true;

                    txtAlterarNome.Visible = false;
                    txtAlterarSenha.Visible = false;
                    btnAlterar.Visible = false;
                    btnNovaConsulta.Visible = false;
                }
                else
                {
                    MessageBox.Show("Não foi possível alterar o usuário");
                }
            }
            catch
            {
                MessageBox.Show("Preencha os campos corretamente");
            }

        }

        private void btnNovaConsulta_Click(object sender, EventArgs e)
        {
            new FormHelper().RecursiveClearTextBoxes(this.Controls);
            txtAlterarFuncional.Enabled = true;
            btnConsultar.Enabled = true;
            
            txtAlterarNome.Visible = false;
            txtAlterarSenha.Visible = false;
            btnAlterar.Visible = false;
            btnNovaConsulta.Visible = false;
        }

        private void btnCadastrar_Click(object sender, EventArgs e)
        {
            double Num;
            bool isNum = double.TryParse(txtFuncional.Text, out Num);

            if (!isNum)
            {
                MessageBox.Show("A funcional deve conter somento números");
                return;
            }
            if (txtSenha.Text.Length < 1)
            {
                MessageBox.Show("Escolha uma senha");
                return;
            }
            if (txtNome.Text.Length < 1)
            {
                MessageBox.Show("Escolha um Nome");
                return;
            }

            try
            {
                int tipo = Convert.ToInt32(cbTipo.Text.Split('-').First().Trim());
                new Gerente().CadastrarUsuario(Convert.ToInt32(txtFuncional.Text), txtSenha.Text, txtNome.Text, tipo);
                new FormHelper().RecursiveClearTextBoxes(this.Controls);
                MessageBox.Show("Usuário cadastrado com sucesso");
            }
            catch
            {
                MessageBox.Show("Não foi possível cadastrar o usuário");
            }
        }

        private void btnRelatorioConsultar_Click(object sender, EventArgs e)
        {
            DateTime data = Convert.ToDateTime(dtpData.Text);
            var vendas = new Gerente().GerarRelatorioControleDiario(data);
            gridVendas.DataSource = ToDataTable(vendas);
            gridVendas.Visible = true;

            
        }

        private DataTable ToDataTable(List<RelatorioControleDiario> vendas)
        {
            DataTable returnTable = new DataTable("Vendas");
            returnTable.Columns.Add(new DataColumn("Produto"));
            returnTable.Columns.Add(new DataColumn("Valor"));
            returnTable.Columns.Add(new DataColumn("Valor Recebido"));
            returnTable.Columns.Add(new DataColumn("Troco"));

            foreach (var venda in vendas)
            {
                returnTable.AcceptChanges();
                DataRow row = returnTable.NewRow();
                row[0] = venda.IdProduto;
                row[1] = venda.ValorProduto;
                row[2] = venda.ValorRecebido;
                row[3] = venda.Troco;

                returnTable.Rows.Add(row);
            }
            return returnTable;
        }

        private DataTable ToDataTable(IList<RelatorioControleDeEstoque> produtos)
        {
            DataTable returnTable = new DataTable("Produtos");
            returnTable.Columns.Add(new DataColumn("Id"));
            returnTable.Columns.Add(new DataColumn("Modelo"));
            returnTable.Columns.Add(new DataColumn("Quantidade"));
            returnTable.Columns.Add(new DataColumn("Preço"));

            foreach (var produto in produtos)
            {
                returnTable.AcceptChanges();
                DataRow row = returnTable.NewRow();
                row[0] = produto.IdProduto;
                row[1] = produto.NomeProduto;
                row[2] = produto.QuantidadeNoEstoque;
                row[3] = produto.Preco;

                returnTable.Rows.Add(row);
            }
            return returnTable;
        }
    }
}
